package com.wbt.design.patterns.singleton;

/**
 * 懒汉模式
 */
public class SingletonLazy {
    /**
     *  volatile 作用 禁止指令排序
     *  因为 new 对象过程有三个阶段,在高并发下存在对象刚创建后没初始化完成，就被使用
     */
    private static volatile SingletonLazy instance = null;

    private SingletonLazy(){}

    public static SingletonLazy getInatance (){

        /**
         * 第一个if 作用：消除加锁，提高效率
         */
        if(instance == null){
            synchronized(SingletonLazy.class){
                /**
                 * 第二个if 作用 ：多个线程进入第一个if 确保之创建一个对象
                 */
                if(instance == null){
                    instance = new SingletonLazy();
                }
            }
        }

        return instance;
    }

}
